package testes;

import logica.locacao.Cobertura;
import logica.locacao.Seguro;
import logica.util.Constantes;
import logica.veiculo.Estado;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
 * Testes da classe Seguro
 * @author Pedro Rawan Meireles Limeira - prmlimeira@gmail.com
 *
 */
public class TestaSeguro {
	
	private Seguro seguro;
	
	@Before
	public void antesDosTestes() throws Exception{
		seguro = new Seguro(Cobertura.TOTAL, Constantes.MAXIMO_PORCENTAGEM_SEGURO);
		System.out.println("Inicio de um @Test ");
	}
	
	@Test
	public void testaConstrutor(){
		try{
			Seguro seg = new Seguro(Cobertura.TOTAL, Constantes.MAXIMO_PORCENTAGEM_SEGURO + 1);
			System.out.println(seg);//So para tirar o warning
			Assert.fail();
		}catch(Exception e){
			Assert.assertEquals("Porcentagem invalida!", e.getMessage());
		}
		
		try{
			Seguro seg = new Seguro(Cobertura.PARCIAL, Constantes.MINIMO_PORCENTAGEM_SEGURO - 1);
			System.out.println(seg);//So para tirar o warning
			Assert.fail();						
		}catch(Exception e){
			Assert.assertEquals("Porcentagem invalida!", e.getMessage());
		}
		
		try{
			Seguro seg = new Seguro(null, Constantes.MINIMO_PORCENTAGEM_SEGURO - 1);
			System.out.println(seg);//So para tirar o warning
			Assert.fail();						
		}catch(Exception e){
			Assert.assertEquals("Cobertura invalida!", e.getMessage());
		}
		
	}
	
	@Test
	public void testaGetCobertura(){
		Assert.assertEquals(Cobertura.TOTAL, seguro.getCobertura());
	}
	
	@Test
	public void testaSetCobertura() throws Exception{
		try{
			seguro.setCobertura(null);
			Assert.fail();
		}catch(Exception e){
			Assert.assertEquals("Cobertura invalida!", e.getMessage());
		}
		
		seguro.setCobertura(Cobertura.PARCIAL);
		Assert.assertEquals(Cobertura.PARCIAL, seguro.getCobertura());
	}
	
	@Test
	public void testaGetEstadosCobertos() throws Exception{
		Assert.assertEquals(Constantes.ESTADOS_TOTAL, seguro.getEstadosCobertos());
		seguro.setCobertura(Cobertura.PARCIAL);
		Assert.assertEquals(Constantes.ESTADOS_PARCIAL, seguro.getEstadosCobertos());
	}
	
	@Test
	public void testaCobre() throws Exception{
		
		Assert.assertTrue(seguro.getCobertura().cobre(Estado.AMASSADO_LEVE));
		seguro.setCobertura(Cobertura.PARCIAL);
		Assert.assertFalse(seguro.getCobertura().cobre(Estado.ROUBADO));
	}
	
	@Test
	public void testaGetESetPorcentagem() throws Exception{
		try{
			seguro.setPorcentagem(-1);
			Assert.fail();
		}catch(Exception e){
			Assert.assertEquals("Porcentagem invalida!", e.getMessage());
		}
		
		seguro.setPorcentagem(Constantes.MINIMO_PORCENTAGEM_SEGURO + 10);
		Assert.assertEquals(Constantes.MINIMO_PORCENTAGEM_SEGURO+10, seguro.getPorcentagem());
	}
	
	@After
	public void depoisDosTestes(){
		System.out.println("Fim do @Teste");
	}
}
